package hotciv.strategies;

import hotciv.common.ModifiableGame;
import hotciv.framework.*;

public interface MoveUnitStrategy {
	
	public int distanceBetweenTiles(ModifiableGame game, Position from, Position to);
	public boolean isWalkableTile(ModifiableGame game, Position p);
	public boolean unitOccupiedTile(ModifiableGame game, Position p);
	
	/**
	 * Moves a unit in the game
	 * Precondition: There is a unit in the from Position.
	 * Precondition: The unit lives within the game instance provided.
	 * Precondition: The to Position is within the game.
	 * @param game - the game instance
	 * @param from - the from Position
	 * @param to - the to Position
	 * @param as - the strategy to calculate a attack outcome
	 * @return whether the move is performed (is valid)
	 */
	public boolean moveUnit(ModifiableGame game, Position from, Position to, AttackStrategy as);
}
